using System;
using System.Collections.Generic;
using SIP.PN.Servicios.Interfaces.DTO;

namespace SIP.PN.Servicios.Interfaces
{
    public interface IServicioProyecto : IServicio
    {
        // Proyectos
        IList<ProyectoDTO> ListarProyecto(string orden, int desde, int cantidad, int codigo, string nombre, string tipoDeProyecto, string estado);
        int ObtenerCantidadRegistrosProyecto(int codigo, string nombre, string tipoDeProyecto, string estado);
        ProyectoDTO ObtenerProyecto(int codigo);
        void CrearProyecto(string nombre, string descripcion, DateTime fechaInicio, DateTime fechaFin, string codigoTipoDeProyecto, string codigoEstado, string cliente);
        void ModificarProyecto(int codigo, string nombre, string descripcion, DateTime fechaInicio, DateTime fechaFin, string codigoTipoDeProyecto, string codigoEstado, string cliente);
        void EliminarProyecto(int codigo);

        // Trabajos
        IList<ProyectoTrabajoDTO> ListarProyectoTrabajo(int codigoProyecto);
        ProyectoTrabajoDTO ObtenerProyectoTrabajo(int codigoProyecto, int codigoTrabajo);
        void AgregarProyectoTrabajo(int codigoProyecto, string nombre, string descripcion, int orden, DateTime fechaSolicitud, string codigoEstado);
        void ModificarProyectoTrabajo(int codigoProyecto, int codigo, string nombre, string descripcion, int orden, DateTime fechaSolicitud, string codigoEstado);
        void EliminarProyectoTrabajo(int codigoProyecto, int codigoTrabajo);

        // Tarea
        IList<ProyectoTareaDTO> ListarProyectoTarea(int codigoProyecto, int codigoTrabajo);
        ProyectoTareaDTO ObtenerProyectoTarea(int codigoProyecto, int codigoTrabajo, int codigoTarea);
        void AgregarProyectoTarea(int codigoProyecto, int codigoTrabajo, string codigoTarea, string nombre, string descripcion, int orden, DateTime fechaSolicitud, DateTime fechaInicio, DateTime fechaFinEsperado, string codigoEstado);
        void ModificarProyectoTarea(int codigoProyecto, int codigoTrabajo, int codigoProyectoTarea, string codigoTarea, string nombre, string descripcion, int orden, DateTime fechaSolicitud, DateTime fechaInicio, DateTime fechaFinEsperado, string codigoEstado, string motivoDesvio, DateTime? fechaFinReal, int porcentajeAvance);
        void EliminarProyectoTarea(int codigoProyecto, int codigoTrabajo, int codigoTarea);

        // Tarea Requisito
        IList<ProyectoTareaRequisitoDTO> ListarProyectoTareaRequisito(int codigoProyecto, int codigoTrabajo, int codigoTarea);
        ProyectoTareaRequisitoDTO ObtenerProyectoTareaRequisito(int codigoProyecto, int codigoTrabajo, int codigoTarea, string codigoNivelEspecialidad);
        void AgregarProyectoTareaRequisito(int codigoProyecto, int codigoTrabajo, int codigoTarea, string codigoNivelEspecialidad, int cantidad);
        void ModificarProyectoTareaRequisito(int codigoProyecto, int codigoTrabajo, int codigoTarea, string codigoNivelEspecialidad, int cantidad);
        void EliminarProyectoTareaRequisito(int codigoProyecto, int codigoTrabajo, int codigoTarea, string codigoNivelEspecialidad);

        // Tarea Asignacion
        IList<ProyectoTareaAsignacionDTO> ListarProyectoTareaAsignacion(int codigoProyecto, int codigoTrabajo, int codigoTarea);
        void AgregarProyectoTareaAsignacion(int codigoProyecto, int codigoTrabajo, int codigoTarea, string codigoTipoDeDocumento, string numeroDeDocumento, string codigoEspecialidad, string codigoNivelEspecialidad);
        void AgregarProyectoTareaReasignacion(int codigoProyecto, int codigoTrabajo, int codigoTarea, int codigoAsignacion, string codigoTipoDeDocumento, string numeroDeDocumento, string codigoEspecialidad, string codigoNivelEspecialidad, string motivoReemplazo);
        void EliminarProyectoTareaAsignacion(int codigoProyecto, int codigoTrabajo, int codigoTarea, int codigoAsignacion);
        void ProyectoTareaAutoAsignar(int codigoProyecto, int codigoTrabajo, int codigoTarea);

        // Evaluacion
        int EvaluacionCalcularTilde(int puntaje);
        int EvaluacionCalcularPuntaje(int tilde);
        int EvaluacionCalcularPuntajeGlobal(IEnumerable<EvaluacionConceptoDTO> conceptos);
        EvaluacionDTO ObtenerProyectoTareaEvaluacion(int codigoProyecto, int codigoTrabajo, int codigoTarea);
        void EvaluarProyectoTarea(int codigoProyecto, int codigoTrabajo, int codigoTarea, IEnumerable<EvaluacionConceptoDTO> conceptos);

        IList<EvaluacionDTO> ListarProyectoTareaAsignacionEvaluacion(int codigoProyecto, int codigoTrabajo, int codigoTarea);
        void EvaluarProyectoTareaAsignacion(int codigoProyecto, int codigoTrabajo, int codigoTarea, int codigoAsignacion, IEnumerable<EvaluacionConceptoDTO> conceptos);
    }
}
